const cart = {
  namespaced: true,
  state: {
    carts: {
      total: 35,
      isAllChecked: true,
      items: [
       /*  {
          id: 600717,
          minPrice: 56,
          name: "的点点滴滴",
          originalPrice: 0,
          pic: "https://dcdn.it120.cc/2020/10/22/1b49cf97-263e-483b-8d97-7f85a71a4408.jpg",
          num: 1,
          isChecked: true
        },
        {
          id: 600716,
          minPrice: 56,
          name: "的点点滴222滴",
          originalPrice: 0,
          pic: "https://dcdn.it120.cc/2020/10/22/1b49cf97-263e-483b-8d97-7f85a71a4408.jpg",
          num: 12,
          isChecked: true
        } */
      ]
    }
  },
  mutations: {
    // 计算 总价格
     calcTotal (state,total) {
       state.carts.total = total
    },
    // 动态设置 购物车数据
    setCarts(state, carts){
      state.carts = carts
    },
    // 删除商品
    delItem(state, index){
      state.carts.items.splice(index, 1)
      // 当 商品全部被删除、或者商品没有的时候，全选 不勾选上
      if (! state.carts.items.length) {
        state.carts.isAllChecked = false
      }
    },
    // 设置全选状态
    setAllChecked(state, allChecked){
      state.carts.isAllChecked = allChecked
    },
    // 全选
    cancelAllChecked(state, allCheckedState){
      state.carts.items.forEach(item => {item.isChecked = allCheckedState})
    },
    // 加入购物车
    addCart(state, item){
      state.carts.items.push(item)
    },
    // 增加 商品数量
    addItemNum(state, index){
      state.carts.items[index].num++
    },
  },
  actions: {
    // 计算 总价格
     calc_total ({ commit, state: { carts } }) {
       let { items } = carts
     /* 
      购物车总价逻辑：
          总价 = 选中的商品价格总和
     */
    // 1. 定义初始 总价格
    let total = 0
    // 2. 去掉未选中的 商品
    let checkedItems = items.filter(item => item.isChecked)
    checkedItems.forEach(item => {
      total += item.num * item.minPrice
    })
    total = parseFloat(total.toFixed(2))
    commit('calcTotal',total)
    },
    // 加入 购物车
    add_cart({ commit, state: { carts } }, item){
      // 条件：判断购物车里面是否 已经有了该商品
      const { items } = carts
      const index = items.findIndex(el => el.id === item.id)
      if (index === -1) {
        // 直接加入 购物车
        commit('addCart', item)
      } else {
        // 数量 ++
        commit('addItemNum', index)
      }
    }
  }
}

export default cart